package com.yl.chainStore.entity.pay

import com.alibaba.druid.support.json.JSONUtils
import com.alibaba.fastjson.JSONObject
import com.baomidou.mybatisplus.annotation.IdType
import com.baomidou.mybatisplus.annotation.TableField
import com.baomidou.mybatisplus.annotation.TableId
import com.baomidou.mybatisplus.annotation.TableName
import com.yl.chainStore.common.enums.TypeEnum
import com.yl.chainStore.entity.OtherShow
import com.yl.chainStore.payrule.coupons.CouponsRuleTypeEnum
import com.yl.chainStore.payrule.coupons.CouponsRule
import com.yl.common.annotation.NoArg
import com.yl.common.getContext
import java.util.*

/**
 * <p>
 *  用户优惠卷模板
 * </p>
 *
 * @author cxw
 * @since 2021-07-30
 */
@NoArg
@TableName(value ="pay_company_coupons_model",autoResultMap = true)
data class PayCompanyCouponsModel(

	/**
	 * id
	 */
	@TableId(value = "id", type = IdType.AUTO)
	var id: Long,

	/**
	 * 标题
	 */
	@TableField("title")
	var title: String,

	/**
	 * 内容
	 */
	@TableField("content")
	var content: String,


	/**
	 * 开始时间
	 */
	@TableField("start_time")
	var startTime: Date? = null,

	/**
	 * 结束时间
	 */
	@TableField("end_time")
	var endTime: Date? = null,

	/**
	 * 创建用户id
	 */
	@TableField("create_user_id")
	var createUserId: Long = getContext().userId,


	/**
	 * 数据有效性
	 */
	@TableField("enabled")
	var enabled: Int = 1,

	/**
	 * 公司id
	 */
	@TableField("company_id")
	var companyId: Long = getContext().companyId,

	/**
	 * 部门id
	 */
	@TableField("dept_id")
	var deptId: Long? = null,

	/**
	 * 是否显示
	 */
	@TableField("show_status")
	var showStatus: Int = 1,

	/**
	 * 类型
	 */
	@TableField("type")
	var type: TypeEnum = TypeEnum.CUSTOMER_COUPONS_CASH,

	/**
	 * 逻辑规则类型
	 */
	@TableField("rule_type")
	var ruleType: CouponsRuleTypeEnum = CouponsRuleTypeEnum.DEFAULT,

	/**
	 * 使用时间类型
	 */
	@TableField("time_type")
	var timeType: TypeEnum = TypeEnum.CUSTOMER_COUPONS_TIME_TYPE_DAY_TO_DAY,

	/**
	 * 发放后开始时间
	 */
	@TableField("start_time_day")
	var startTimeDay: Int = 0,

	/**
	 * 发放后结束时间
	 */
	@TableField("end_time_day")
	var endTimeDay: Int = 0

) : OtherShow() {

	fun getOtherContentObj(): CouponsRule {
		return if(other is Map<*, *>){
			JSONObject.parseObject(JSONUtils.toJSONString(other), ruleType.clazz)
		}else{
			JSONObject.parseObject(other.toString(), ruleType.clazz)
		}
	}
}
